/**    
 * @Description: 博客园地址：https://www.cnblogs.com/zumengjie/      
 * @author: 顶风少年   
 * @date: 2021年4月5日 下午6:57:48
 */

package datang.dtdb.builder;

import java.util.ArrayList;
import java.util.List;

import datang.dtdb.mapping.MappedStatement;
import datang.dtdb.mapping.ResultMap;
import datang.dtdb.mapping.SqlSource;
import datang.dtdb.mapping.StatementType;
import datang.dtdb.session.Configuration;

/**
 * mapper助理类,每一个CURD标签都可能有公用的属性
 */
public class MapperBuilderAssistant extends BaseBuilder {

	/**
	 * 同样继承BaseBuilder需要Configuration
	 */
	public MapperBuilderAssistant(Configuration configuration) {
		super(configuration);
	}

	/**
	 * 命名空间
	 */
	private String currentNamespace;

	/**
	 * 获取命名空间
	 */
	public String getCurrentNamespace() {
		return currentNamespace;
	}

	/**
	 * 设置命名空间
	 */
	public void setCurrentNamespace(String currentNamespace) {
		this.currentNamespace = currentNamespace;
	}

	/**
	 * 创建statement并添加到Configuration
	 * 
	 * @param resultType
	 * @param sqlSource
	 * @param id
	 */
	public void addMappedStatement(String id, SqlSource sqlSource, Class<?> resultType,StatementType statementType) {
		MappedStatement mappedStatement = new MappedStatement.Build(configuration).id(currentNamespace + "." + id)
				.sqlSource(sqlSource).resultMaps(getStatementResultMaps(null, resultType, id)).statementType(statementType).build();
		configuration.addMappedStatement(mappedStatement.getId(), mappedStatement);
	}

	/**
	 * 封装返回值类型
	 * */
	private List<ResultMap> getStatementResultMaps(String resultMap, Class<?> resultType, String id) {
		List<ResultMap> resultMaps = new ArrayList<ResultMap>();
		if (resultType != null) {
			ResultMap inlineResultMap = new ResultMap.Builder().type(resultType).build();
			resultMaps.add(inlineResultMap);
		}
		return resultMaps;
	}
}
